package com.Maykk.Demo12;

import java.util.*;
import java.util.stream.Stream;
import java.util.ArrayList;

/**
 * @ClassName: Dmo07
 * @Description: TODO
 * @Author: MaykkStar@163.com
 */

public class Demo07 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("张三丰");
        list.add("张翠山");
        list.add("赵敏");
        list.add("张无忌");
        list.add("殷素素");
        list.add("谢逊");
        list.add("灭绝");
        list.add("张牙舞爪");

        // Stream 中间处理
        // 姓张的(filter)
        list.stream().filter(s -> s.startsWith("张")).forEach(s -> System.out.println(s));
        System.out.println("==============");

        // 长度为三的
        list.stream().filter(s -> 3 == s.length()).forEach(s -> System.out.println(s));
        System.out.println("==============");

        // 张开头、长度为3、取前两个(limit)
        list.stream().filter(s -> s.startsWith("张")).filter(s -> 3 == s.length()).limit(2).forEach(s -> System.out.println(s));
        System.out.println("==============");

        // 张开头、长度为3、跳过前两个(skip)
        list.stream().filter(s -> s.startsWith("张")).filter(s -> 3 == s.length()).skip(2).forEach(s -> System.out.println(s));
        System.out.println("==============");

        // 取前五个组成一个流
        Stream<String> s01 = list.stream().limit(5);
        // s01.forEach(System.out::println);
        // 流被终结了之后再使用就会出现 ： IllegalStateException
        System.out.println("==============");

        // 取跳过3个组成一个流
        Stream<String> s02 = list.stream().skip(3);
        // s02.forEach(System.out::println);
        System.out.println("==============");

        // 将 s01 和 s02 组成一个新的流
        // Stream.concat(s01,s02).forEach(System.out::println);
        System.out.println("==============");

        // 将 s01 和 s02 组成一个新的流,去掉重复的
        Stream.concat(s01, s02).distinct().forEach(System.out::println);
        System.out.println("==============");

        // 自然排序
        list.stream().sorted().forEach(System.out::println);
        System.out.println("==============");

        // 比较器排序
        list.stream().sorted((s1, s2) -> {
            int res = s1.length() - s2.length();
            return 0 == res ? s1.compareTo(s2) : res;
        }).forEach(System.out::println);
        // 通过提示 Alt+Enter 生成
        // list.stream().sorted(Comparator.comparingInt(String::length).thenComparing(s -> s)).forEach(System.out::println);
        System.out.println("==============");

        // 将集合中的字符串转换为整数之后在控制台输出
        list.clear();
        list.add("111");
        list.add("555");
        list.add("333");
        list.add("222");
        list.add("444");

        // list.stream().map(s -> Integer.parseInt(s)).sorted().forEach(System.out::println);
        list.stream().map(Integer::parseInt).sorted().forEach(System.out::println);
        System.out.println("==============");


        // 通过 mapToInt 实现
        list.stream().mapToInt(Integer::parseInt).forEach(System.out::println);// 普通的转换
        System.out.println("==============");

        // 转换后求和， IntStream 中特有的计算方法
        int sum = list.stream().mapToInt(Integer::parseInt).sum();
        System.out.println(sum);
        System.out.println("==============");
    }
}